/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package pers.sakurasora.lesson.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import pers.sakurasora.lesson.entity.SysUser;
import pers.sakurasora.lesson.service.UserService;

/*----------------------------------------------------------------------------------------------------------------------------------------------------------
 *             在一般情况下，控制器方法返回的字符串都会被当做逻辑视图名来处理。                                                                            *
 *             但是当字符串带有“forward”或者“redirect”前缀时，则对他们进行特殊处理。把“forward”与“redirect”当成指示符，其后的字符串作为URL来处理。 *
 *             redirect：会让浏览器发起一个新的请求。                                                                                                      *
 *             forward：与当前请求同属一个                                                                                                                 *
-----------------------------------------------------------------------------------------------------------------------------------------------------------*/

/**
 * @author SakuraSora
 * @Email 1468071675@qq.com
 * @DateTime 2018-10-31 10:22:06
 *
 * @Description
 *             控制层(表示层)--处理登录请求
 */
@Controller/*dispatcher-servlet.xml中的“beans”要加上 xmlns:contex 和 xmlns:mvc的配置*/
public class LoginController {

    @Autowired
    UserService service;
    
    /**
     * 控制器--显示login的表单
     * @return 
     *        登录页面（视图名:login）
     */
    @RequestMapping("/login")//请求到哪一个地址；
    /*由控制器接收请求，转到哪一个视图(/WEB-INF/jsp/目录下的JSP文件) */                            
    public String loginForm() {
        return "login"; //视图名（对应/WEB-INF/jsp/目录下的login.jsp）
     /*<bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />  
        
        ----viewResolver:视图解析器 */
    }
   
    /**
     * 控制器--(真正的动作)登录跳转页面
     * @param user
     * @param session
     *                  认证成功，将数据放到session中
     * @param request
     *                  如果失败，要保存一个错误信息到request中
     * @return 
     *          认证成功--主页<br>
     *          认证失败--提示错误信息，登录页面
     */
    @RequestMapping("/doLogin")
    public String doLogin(SysUser user, HttpSession session, HttpServletRequest request) {/*只要遵循命名规范，MVC会自动帮你做映射*/
//        System.out.println(user.getName() + "\t" + user.getPassword());//如登录页面提交“admin	123”；控制台输出“admin	123”
       // 进行认证
       SysUser authInfo = service.authenticate(user.getName(), user.getPassword());
       if (authInfo != null) {
           // 1.认证成功，将数据放到session中(使用spring传进来的HttpSession对象，而不需使用request的getSession等方法)
           session.setAttribute("LOGIN_USER", authInfo);//存的应该是authInfo而不是user
           // 2.页面的转向，一般来说，成功了以后会用重定向
           return "redirect:main.htm";//重定向时要加后缀（如：.htm）
           
//           return "redirect:redirectMain.htm";//添加映射方法--在这个控制类中添加一个方法( @RequestMapping("/redirectMain") )
           
           /*------------------------------------------------------------------------
            redirect会让浏览器发起一个新的请求;
            请求过来都是要经过控制器的，需要再加一个映射;
            可以在dispatcher-servlet.xml中添加配置
                如：<mvc:view-controller path="/main.htm" view-name="main"/>
            也可以在这个控制类中添加一个方法，
           ---------------------------------------------------------------------------*/
       } else {
           //如果失败，（authInfo为空）要保存一个错误信息，在页面上显示(使用pring传进来的 HttpServletRequest对象)
           request.setAttribute("error", "用户名或密码错误");
           return "login";
       }
    }
    /*-------------------------------------------------------------------------
    public String doLogin(String name,String password) {//只要遵循命名规范，MVC会自动帮你做映射
        System.out.println(name + "\t" + password);//如登录页面提交“2  2”；控制台输出“2    2”
        return "login";
    }
    ---------------------------------------------------------------------------*/
    
    /*-------------------------------------------------------------------------
    //添加映射方法1--在dispatcher-servlet.xml中添加配置
            // <mvc:view-controller path="/main.htm" view-name="main"/>
      
    //添加映射方法2--在这个控制类中添加一个方法
    @RequestMapping("/redirectMain")
    public  String redirectMain() {
        return "main";
    }
    ----------------------------------------------------------------------------*/
}

